package com.fangwaii.core.bind;

import com.fangwaii.core.session.GatewaySession;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;
import java.util.Map;

/**
 * @author lxc18
 * @date 2024/11/30 16:38
 * @description GenericReferenceProxy
 */
public class MapperProxy implements MethodInterceptor {

    private GatewaySession gatewaySession;

    private final String uri;

    public MapperProxy(GatewaySession gatewaySession, String uri) {
        this.gatewaySession = gatewaySession;
        this.uri = uri;
    }


    /**
     * 做一层代理控制，后续不止是可以使用 Dubbo 泛化调用，也可以是其他服务的泛化调用
     */
    // 这里的参数 o 是被代理的对象，method 是被代理的方法，args 是被代理的方法的参数，methodProxy 是被代理的方法的代理对象
    @Override
    public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
        MapperMethod linkMethod = new MapperMethod(uri,gatewaySession.getConfiguration());
        //(Map<String, Object>) args[0]为空？
        return linkMethod.execute(gatewaySession, (Map<String, Object>) args[0]);
    }
}
